<?php
setlocale(LC_TIME, 'Spanish');
class PlaneacionesController extends AppController {

	var $name = 'Planeaciones';
	var $helpers = array('Html', 'Form', 'Calendar', 'Access','Xls');
	var $uses = array('Planeacione', 'UsersEquiposOperativo', 'CentroApoyoEscolare', 'User', 'Group','Actividade');

	function index() {
		$this->Planeacione->recursive = 0;
		$this->set('planeaciones', $this->paginate());
	}
	
	/*
	function index() {		
		$group_id= $this->Access->getMy('group_id');
		$user_id= $this->Access->getMy('id');
		$this->set(compact('group_id','user_id'));
	}
	*/	


	function view($id = null) {
		if (!$id) {
			$this->Session->setFlash(__('Invalid planeacione', true));
			$this->redirect(array('action' => 'index'));
		}
		$planeacion = $this->Planeacione->read(null, $id);
		
		$caes = split(",",$planeacion['Planeacione']['centro_apoyo_escolare_id']);
		$actores="";		
		for($i=0; $i<count($caes); $i++){
			$nombre = "";
			if($caes[$i]!="-1"){
				$cae = $this->CentroApoyoEscolare->read('nombre',$caes[$i]);
				$nombre = $cae['CentroApoyoEscolare']['nombre'];
			}else{
				$nombre= "Equipo Operativo"; 
			}			
			$actores.= ($i<count($caes)-1)? $nombre.", ": $nombre;			
		}
		
		$this->set('planeacione', $planeacion);
		$this->set('actores', $actores);
	}

    function add($mes = null, $number_month=null , $enlace1= null ) {
		$usuario_activo = $this->Access->getMy('username');
		//Verificacion de sesion del sistema		
		if(!$usuario_activo){
			$this->Session->setFlash(__('Por favor inicie sesion', true));
			$this->redirect(array('controller'=>'users','action' => 'login'));
		}
		if(!empty($this->data)) {
			$this->Planeacione->create();
			$form = $this->data;
			$caes="";	
			$count =count($form['Planeacione']['centro_apoyo_escolare_id']);
			
			if(empty($form['Planeacione']['centro_apoyo_escolare_id'])){
				$this->Session->setFlash(__('La actividad no ha sido guardada. Intente de nuevo.', true));				
			}
			else{
							
				if($count==1){//Se escogio un solo 'cae'
					$caes = $form['Planeacione']['centro_apoyo_escolare_id'][0];
					
				}else if($count>1){ //Se escogieron varios 'caes'
					$contador = 1;				
					foreach($form['Planeacione']['centro_apoyo_escolare_id'] as $cae){
						$caes.= ($contador<$count)? $cae.",": $cae;
						$contador++;
					}
				}
				$form['Planeacione']['centro_apoyo_escolare_id']= $caes;
				$form['Planeacione']['event_date'] = date('Y')."-".$form['Planeacione']['mes']."-".$form['Planeacione']['dia']; 				
				if ($this->Planeacione->save($form)) {
					$this->Session->setFlash(__('Actividad guardada', true));
					$this->redirect(array('action' => 'calendar'));
				} else {
					$this->Session->setFlash(__('La actividad no ha sido guardada. Intente de nuevo.', true));
				}				
			}			
		}
		
		$user_id= $this->Access->getMy('id');
		$group_id= $this->Access->getMy('group_id');
		$users = $this->Planeacione->User->find('list', array('fields'=>array('User.id','User.nombre_completo'), 'conditions'=>array('User.id'=>$user_id)));		
		
		//Circulos de aprendizaje por rol
		
		if($group_id!="1"){
			$eo = $this->UsersEquiposOperativo->find('first',array('fields'=>array('UsersEquiposOperativo.equipos_operativo_id'),'conditions'=>array('UsersEquiposOperativo.user_id'=>$user_id))); 
			if($group_id=="2"){ //Tutor
				$centroApoyoEscolares = $this->CentroApoyoEscolare->find('list',array('fields'=>array('CentroApoyoEscolare.id','CentroApoyoEscolare.nombre'), 
																					  'conditions'=>array('CentroApoyoEscolare.user_id'=>$user_id)));			
			}else{//Asesores y Coordinadores
				$centroApoyoEscolares  = $this->CentroApoyoEscolare->find('list',array('fields'=>array('CentroApoyoEscolare.id','CentroApoyoEscolare.nombre'), 
																					  'conditions'=>array('CentroApoyoEscolare.equipos_operativo_id'=>$eo['UsersEquiposOperativo']['equipos_operativo_id'])));
			}			
		}else{//Admon
			$centroApoyoEscolares = $this->CentroApoyoEscolare->find('list',array('fields'=>array('CentroApoyoEscolare.id','CentroApoyoEscolare.nombre')));
		}
		//Se agrega a la lista la opcion del EO para las actividades
		$centroApoyoEscolares[-1]="Equipo Operativo";
		$actividades = $this->Planeacione->Actividade->find('list',array('fields'=>array('Actividade.id','Actividade.nombre'),
																		 'conditions'=>array('Actividade.group_id'=>$this->Access->getMy('group_id')),
																		 'order'=>'Actividade.nombre ASC'));

		//Enviar el mes para que en el formulario solo aparezca ese mes

		   if (array($number_month) == array($enlace1) )
		    {  
			     $mes1 = array($number_month);
		    }
		   
		//$this->set($mes);

		$this->set(compact('users', 'centroApoyoEscolares', 'user_id','group_id', 'mes','actividades'));
	}

	function edit($id = null) {
		if (!$id && empty($this->data)) {
			$this->Session->setFlash(__('Invalid planeacione', true));
			$this->redirect(array('action' => 'index'));
		}
		if (!empty($this->data)) {			
			$form = $this->data;
			
			$caes="";	
			$count =count($form['Planeacione']['centro_apoyo_escolare_id']);
			
			if(empty($form['Planeacione']['centro_apoyo_escolare_id'])){
				//Editando por un superior
				//Asigna los caes ya asignados por el propietario
				if($form['Planeacione']['editando']==true){
					//Se asigna la fecha del calendario que se estaba aprobando
					$anio = substr($form['Planeacione']['fecha'],0,4);
					$mes = substr($form['Planeacione']['fecha'],5,2);					
					$form['Planeacione']['centro_apoyo_escolare_id'] = $form['Planeacione']['caes_aprobados'];
					if ($this->Planeacione->save($form)) {
						$this->Session->setFlash(__('Actividad guardada', true));
						$this->redirect(array('action' => 'calendar', $anio, $mes, $form['Planeacione']['user_id'] ));
					} else {
						$this->Session->setFlash(__('La actividad no ha sido guardada. Intente de nuevo.', true));
					}
				}else{
					$this->Session->setFlash(__('La actividad no ha sido guardada. Intente de nuevo.', true));
				}				
			}
			else{				
				if($count==1){//Se escogio un solo 'cae'
					$caes = $form['Planeacione']['centro_apoyo_escolare_id'][0];					
				}else if($count>1){ //Se escogieron varios 'caes'
					$contador = 1;				
					foreach($form['Planeacione']['centro_apoyo_escolare_id'] as $cae){
						$caes.= ($contador<$count)? $cae.",": $cae;
						$contador++;
					}
				}
				$form['Planeacione']['centro_apoyo_escolare_id']= $caes;				
				if ($this->Planeacione->save($form)) {
					$this->Session->setFlash(__('Actividad guardada', true));
					$this->redirect(array('action' => 'calendar'));
				} else {
					$this->Session->setFlash(__('La actividad no ha sido guardada. Intente de nuevo.', true));
				}				
			}		
			
		}
		if (empty($this->data)) {
			$this->data = $this->Planeacione->read(null, $id);
		}
		
		$group_id = $this->Access->getMy('group_id');
		$user_id = $this->Access->getMy('id');		
		
		$users = $this->Planeacione->User->find('first', array('conditions'=>array('User.id'=>$this->data['Planeacione']['user_id'])));		
		
		//caes por rol
		if($group_id!="1"){
			$eo = $this->UsersEquiposOperativo->find('first',array('fields'=>array('UsersEquiposOperativo.equipos_operativo_id'),'conditions'=>array('UsersEquiposOperativo.user_id'=>$user_id))); 
			if($group_id=="2"){ //Tutor
				$centroApoyoEscolares = $this->CentroApoyoEscolare->find('list',array('fields'=>array('CentroApoyoEscolare.id','CentroApoyoEscolare.nombre'), 
																					  'conditions'=>array('CentroApoyoEscolare.user_id'=>$user_id)));			
			}else{//Asesores y Coordinadores
				$centroApoyoEscolares = $this->CentroApoyoEscolare->find('list',array('fields'=>array('CentroApoyoEscolare.id','CentroApoyoEscolare.nombre'), 
																					  'conditions'=>array('CentroApoyoEscolare.equipos_operativo_id'=>$eo['UsersEquiposOperativo']['equipos_operativo_id'])));
			}
		}else{//Admon
			$centroApoyoEscolares = $this->CentroApoyoEscolare->find('list',array('fields'=>array('CentroApoyoEscolare.id','CentroApoyoEscolare.nombre')));
		}
		//Se agrega a la lista la opcion del EO para las actividades
		$centroApoyoEscolares[-1]="Equipo Operativo";
		
		//Split de los actores
		$actores_activos = split(",",$this->data['Planeacione']['centro_apoyo_escolare_id']);
		
		$caes_aprobados = $this->data['Planeacione']['centro_apoyo_escolare_id'];
		
		$grupo_actividades = $group_id;
		if($users['User']['group_id']!=$grupo_actividades){ //Es el calendario de otra persona
 			$grupo_actividades =$users['User']['group_id']; 
 		}		
		
		$actividades = $this->Planeacione->Actividade->find('list',array('fields'=>array('Actividade.id','Actividade.nombre'),
																		 'conditions'=>array('Actividade.group_id'=>$grupo_actividades),
																		 'order'=>'Actividade.nombre ASC'));
		//$actividad_activa = $this->Planeacione->Actividade->find('list',array('fields'=>array('Actividade.id','Actividade.nombre'),'conditions'=>array('Actividade.id'=>$this->data['Planeacione']['actividade_id'])));
		$actividad_activa = $this->data['Planeacione']['actividade_id'];		
		
		$this->set(compact('users', 'centroApoyoEscolares', 'user_id', 'group_id', 'actores_activos', 'caes_aprobados', 'actividades', 'actividad_activa'));
	}

	function delete($id = null) {
		if (!$id) {
			$this->Session->setFlash(__('Invalid id for planeacione', true));
			$this->redirect(array('action'=>'index'));
		}
		if ($this->Planeacione->delete($id)) {
			$this->Session->setFlash(__('Actividad eliminada', true));
			$this->redirect(array('action'=>'calendar'));
		}
		$this->Session->setFlash(__('Planeacione was not deleted', true));
		$this->redirect(array('action' => 'index'));
	}
	
	/**
	 * 
	 * Listar los usuarios a aprobar segun el rol del usuario actual.
	 */
	function aprobaciones(){
		$group_id= $this->Access->getMy('group_id');
		$user_id= $this->Access->getMy('id');
		
		$usuarios = array();
		//Si es diferente a Administador
		if($group_id!="1"){				
			//Averiguar el EO al que pertenece por medio de UsersEquiposOperativos
			$user_eo = $this->requestAction('/users_equipos_operativos/getlist/'.$group_id.'/'.$user_id);
			//die(var_dump($user_eo));
			// Se seleccionan los usuarios que segun el rol debe listar
			$usuarios = $this->requestAction('/users/getlist/'.$user_eo['UsersEquiposOperativo']['equipos_operativo_id'].'/'.$group_id);
		}
		//Si es Administrador muestra todos los usuarios
		else{
			$usuarios = $this->paginate('User');
		}		
		
		foreach ($usuarios as &$usuario){ 
			if($group_id!=1)
				$datos = $this->User->find('first',array('fields'=>array('User.group_id', 'User.nombre_completo'),'conditions'=>array('User.id'=>$usuario['UsersEquiposOperativo']['user_id'])));
			else 
				$datos = $this->User->find('first',array('fields'=>array('User.group_id', 'User.nombre_completo'),'conditions'=>array('User.id'=>$usuario['User']['id'])));
			
			$rol = $this->Group->find('first',array('fields'=>array('Group.nombre'),'conditions'=>array('Group.id'=>$datos['User']['group_id'])));
			
			$usuario['Usuario']= $datos['User'];
			$usuario['Rol']=$rol['Group']['nombre'];
			unset($usuario);
		}
		
		$this->set(compact('user_id','group_id', 'usuarios'));
	}
	
	
      function calendar($year = null, $month = null, $user = null) {
		
		$year = date('Y');
		$usuario_activo = $this->Access->getMy('username');
		//Verificacion de sesion del sistema		
		if(!$usuario_activo){
			$this->Session->setFlash(__('Por favor inicie sesion', true));
			$this->redirect(array('controller'=>'users','action' => 'login'));
		}
		
		$month_list = array('january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december');							
		$day_list = array('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun');
		$base_url = $this->webroot . 'planeaciones'; // NOT not used in the current helper version but used in the data array
		$view_base_url = $this->webroot. 'planeaciones';
		
		$data= null;

		if($user==null){
			$user = $this->Access->getMy('id');
			$aprobados = true;
		}
		else if($user==$this->Access->getMy('id')){
			$aprobados = true;
		}else{
			$aprobados = false;
		}
		
		$fields = array('id','actividade_id','estado','DAY(event_date) AS event_day', 'MONTH(event_date) AS event_month');
		$conditions = array("AND" => array('YEAR(Planeacione.event_date) = '. $year, 'Planeacione.user_id'=>$user ));
		$params = array('conditions' => $conditions,'fields' => $fields);

		$var = $this->Planeacione->find('all', $params);	
		$datos="";
		$totales = array();
		foreach($var as $v) {
			//die(var_dump($v));
			
			if(isset($v[0]['event_day'])) {
								
					$day = $v[0]['event_day'];
					$month = $v[0]['event_month'];
			        $actividad = $this->Actividade->read('nombre',$v['Planeacione']['actividade_id']);			        
					
					if(isset($totales[$month][$day])){
						$totales[$month][$day]['aprobados'] = ($v['Planeacione']['estado']=="Aprobado")? $totales[$month][$day]['aprobados']+1: $totales[$month][$day]['aprobados'];
						$totales[$month][$day]['sin_aprobar'] = ($v['Planeacione']['estado']!="Aprobado")? $totales[$month][$day]['sin_aprobar']+1: $totales[$month][$day]['sin_aprobar'];
					}else{
						$totales[$month][$day]['aprobados'] = ($v['Planeacione']['estado']=="Aprobado")? 1: 0;
						$totales[$month][$day]['sin_aprobar'] = ($v['Planeacione']['estado']!="Aprobado")? 1: 0;
					}

					$vista = ($v['Planeacione']['estado']=="Aprobado")? "view": "edit";		
					$enlace = '<a href="'.$view_base_url.'/'.$vista.'/'.$v['Planeacione']['id'].'">'."<span style='color:#1B5DA6'> * ".$actividad['Actividade']['nombre']."</span> (".$v['Planeacione']['estado'].")".'</a>';					
					
					//Caso en el que el aprobador esta viendo el calendario y solo se muestran los que no han sido aprobados
					if($aprobados==false && $vista=="edit"){												
						if(isset($data[$day])){							
							$data[$month][$day] ='<br />'.$enlace;
							$data[$month]['dia_'.$day] = $day;
						}
						else{
							$data[$month][$day] ='<br />'.$enlace;
							$data[$month]['dia_'.$day] = $day;
						}												
					}
					//Caso en el que el propietario ve el calendario					
					else if($aprobados==true){
						if(isset($data[$month][$day])){
												
							$data[$month][$day] = $data[$month][$day].'<br />'.$enlace;
							$data[$month]['dia_'.$day] = $day;
														
						}
						else{
							$data[$month][$day] ='<br />'.$enlace;
							$data[$month]['dia_'.$day] = $day;
						}						
					}
			}		
		}
		
		$this->set('totales',$totales);
		$this->set('year', $year);
	    $this->set('month', $month);
		$this->set('user', $user);
		$this->set('aprobado', !$aprobados);
		$this->set('base_url', $base_url);
		$this->set('data', $data);	
	}
	
	function planeacion_por_archivo(){
		$usuario_activo = $this->Access->getMy('username');
		//Verificacion de sesion del sistema
		if(!$usuario_activo){
			$this->Session->setFlash(__('Por favor inicie sesion', true));
			$this->redirect(array('controller'=>'users','action' => 'login'));
		}
		if(isset($_FILES['archivos'])){				
			$name = $_FILES['archivos']['name'][0];
			$archivo = fopen($_FILES['archivos']['tmp_name'][0], 'r');

			$fallas = array();
			$i=0; $guardo = false;
			if($_FILES['archivos']['type'][0] == 'application/vnd.ms-excel'){				
				if(substr_compare($name,'.csv', -4, 4) == '0'){
					while (( $data = fgetcsv ($archivo,1000,";")) !== FALSE ){
						$i++;
						$num = count($data);
						$this->Planeacione->create();
						
						$user_id = $data[0];
						$event_date = $data[1];
						$estado = $data[2];
						$municipio_id = $data[3];
						$grupos = $data[4];
						$actividade_id = $data[5];
						$descripcion = $data[6];						
						$enfasis = $data[7];
						$recursos = $data[8];
						$resultados = (isset($data[9]))?$data[9]:'';	
						$observacion = (isset($data[10]))?$data[10]:'';
						
						//Campos Obligatorios
						if(empty($user_id) || empty($event_date) || empty($estado) || empty($municipio_id) || empty($grupos)
								|| empty($actividade_id) || empty($enfasis) ){
								$fallas['Falla'][$i] = array($user_id, $event_date, $estado, $municipio_id, $grupos, 
								$actividade_id, $descripcion, $enfasis, $recursos, $resultados, $observacion);
						}
						else{
							//Guarda los datos satisfactoriamente 
							$this->data['Planeacione']['user_id'] = $user_id;
							$this->data['Planeacione']['event_date'] = $event_date;
							$this->data['Planeacione']['estado'] = $estado;
							$this->data['Planeacione']['municipio_id'] = $municipio_id;
							$this->data['Planeacione']['centro_apoyo_escolare_id'] = $grupos;
							$this->data['Planeacione']['actividade_id'] = $actividade_id;
							$this->data['Planeacione']['descripcion'] = $descripcion;
							$this->data['Planeacione']['enfasis'] = $enfasis;
							$this->data['Planeacione']['recursos'] = $recursos;
							$this->data['Planeacione']['recursos_esperados'] = $resultados;
							$this->data['Planeacione']['observacion'] = $observacion;
							
							$this->Planeacione->save($this->data);
							$guardo = true;					
						}
					}				
					fclose($archivo);
					if(!empty($fallas))
					$fallas = $fallas['Falla'];
					if($guardo)
						$this->Session->setFlash(__('Planeacion Guardada Satisfactoriamente', true));
				}else{
					echo "<script>alert('La extension del archivo debe ser .csv')</script>";
				}
			}else{
				echo "<script>alert('El archivo no esta en Formato Excel')</script>";
			}
		}
		//die(var_dump($fallas['Falla']));
		$this->set(compact('user','fallas'));
	} 
	
	
}
?>